package com.corpgovernment.common.enums;


import com.ctrip.corp.obt.generic.utils.StringUtils;

import java.util.Arrays;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

public enum PayTypeEnum {
    /**
     * 统一支付
     */
    ACCNT("ACCNT", "统一支付"),
    /**
     * 个人支付
     */
    PPAY("PPAY", "个人支付"),

    /**
     * 混付
     */
    MIXPAY("MIXPAY", "随心订"),

    /**
     * 线下支付
     */
    OFFLINE("OFFLINE", "线下支付"),
    /**
     * 个人支付
     */
    CASH("CASH", "前台现付"),
    /**
     * 支付宝
     */
    AliPay("AliPay", "支付宝"),
    /**
     * 微信
     */
    WechatPay("WechatPay", "微信"),
    /**
     * 支付宝
     */
    TripAliPay("TripAliPay", "携程支付宝"),
    /**
     * 微信
     */
    TripWechatPay("TripWechatPay", "携程微信"),
    /**
     * 银联
     */
    UnionPay("UnionPay", "银联"),
    /**
     * Unknown
     */
    Unknown("Unknown", "未知的"),
    /**
     * 如果是携程前台支付的话就传null
     */
    CashNull(null, "空值");

    private String type;
    private String name;

    PayTypeEnum(String type, String name) {
        this.type = type;
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public String getName() {
        return name;
    }


    private static final Map<String, PayTypeEnum> lookup = new HashMap<>();

    static {
        for (PayTypeEnum s : EnumSet.allOf(PayTypeEnum.class)) {
            lookup.put(s.getType(), s);
        }
    }

    public static PayTypeEnum get(String type) {
        PayTypeEnum payTypeEnum = lookup.get(type);
        if (Objects.isNull(payTypeEnum)) {
            return PayTypeEnum.Unknown;
        }
        return payTypeEnum;
    }

    /**
     * 根据类型获取支付方式忽略大小写
     *
     * @param type
     * @return
     */
    public static PayTypeEnum getByTypeIgnoreCase(String type) {
        return Arrays.stream(PayTypeEnum.values()).filter(e -> e.getType().equalsIgnoreCase(type)).findFirst().orElse(PayTypeEnum.Unknown);
    }

    public static boolean exists(String type) {
        return lookup.containsKey(type);
    }
	/**
	 * 根据枚举值，查枚举类型
	 *
	 * @param type
	 * @return
	 */
	public static String getNameByType(String type) {
		if (exists(type)) {
			return get((type)).getName();
		}
		return StringUtils.EMPTY;
	}

}
